﻿using Echart.Model.AngleAxis;
using Echart.Model.Aria;
using Echart.Model.AxisPointer;
using Echart.Model.Brush;
using Echart.Model.Calendar;
using Echart.Model.DataSet;
using Echart.Model.Geo;
using Echart.Model.Graphic;
using Echart.Model.Grid;
using Echart.Model.Legend;
using Echart.Model.Parallel;
using Echart.Model.ParallelAxis;
using Echart.Model.Polar;
using Echart.Model.Radar;
using Echart.Model.RadiusAxis;
using Echart.Model.SingelAxis;
using Echart.Model.TextStyle;
using Echart.Model.TimeLine;
using Echart.Model.TiTle;
using Echart.Model.Toolbox;
using Echart.Model.ToolTip;
using Echart.Model.XAxis;
using Echart.Model.YAxis;

namespace Echart.Model.Option
{
    public class option
    {
        /// <summary>
        /// 标题组件，包含主标题和副标题
        /// </summary>
        public title title { get; set; }

        /// <summary>
        /// 图例组件。
        /// </summary>
        public legend legend { get; set; }

        /// <summary>
        /// 直角坐标系内绘图网格，单个 grid 内最多可以放置上下两个 X 轴，左右两个 Y 轴
        /// </summary>
        public grid grid { get; set; }

        /// <summary>
        ///直角坐标系 grid 中的 x 轴
        /// </summary>
        public xAxis xAxis { get; set; }

        /// <summary>
        ///直角坐标系 grid 中的 y 轴
        /// </summary>
        public yAxis yAxis { get; set; }

        /// <summary>
        /// 极坐标系
        /// </summary>
        public polar polar { get; set; }

        /// <summary>
        /// 极坐标系的径向轴。
        /// </summary>
        public radiusAxis radiusAxis { get; set; }

        /// <summary>
        /// 极坐标系的角度轴。
        /// </summary>
        public angleAxis angleAxis { get; set; }

        /// <summary>
        /// 雷达图坐标系组件
        /// </summary>
        public radar radar { get; set; }

        /// <summary>
        /// 用于区域缩放，从而能自由关注细节的数据信息，或者概览数据整体，或者去除离群点的影响。
        /// </summary>
        public object datazoom { get; set; }

        /// <summary>
        /// 视觉映射组件，用于进行『视觉编码』，也就是将数据映射到视觉元素（视觉通道）
        /// </summary>
        public object visualMap { get; set; }

        /// <summary>
        /// 提示框组件。
        /// </summary>
        public tooltip tooltip { get; set; }

        /// <summary>
        /// 坐标轴指示器（axisPointer）的全局公用设置。
        /// </summary>
        public axisPointer axisPointer { get; set; }

        /// <summary>
        /// 工具栏。内置有导出图片，数据视图，动态类型切换，数据区域缩放，重置五个工具。
        /// </summary>
        public toolbox toolbox { get; set; }

        /// <summary>
        /// 是区域选择组件，用户可以选择图中一部分数据，从而便于向用户展示被选中数据，或者他们的一些统计计算结果。
        /// </summary>
        public brush brush { get; set; }

        /// <summary>
        /// 地理坐标系组件。
        /// </summary>
        public geo geo { get; set; }

        /// <summary>
        /// 平行坐标系。
        /// </summary>
        public parallel parallel { get; set; }

        /// <summary>
        /// 平行坐标系中的坐标轴。
        /// </summary>
        public parallelAxis parallelAxis { get; set; }

        /// <summary>
        /// 单轴。可以被应用到散点图中展现一维数据
        /// </summary>
        public singleAxis singleAxis { get; set; }

        /// <summary>
        /// timeline 组件，提供了在多个 ECharts option 间进行切换、播放等操作的功能
        /// </summary>
        public timeline timeline { get; set; }

        /// <summary>
        /// 原生图形元素组件
        /// </summary>
        public graphic graphic { get; set; }

        /// <summary>
        /// 日历坐标系组件。
        /// </summary>
        public calendar calendar { get; set; }

        /// <summary>
        /// 用于单独的数据集声明，从而数据可以单独管理，被多个组件复用
        /// </summary>
        public dataset dataset { get; set; }

        /// <summary>
        /// 自动根据图表配置项智能生成描述
        /// </summary>
        public aria aria { get; set; }

        /// <summary>
        /// 系列列表。每个系列通过 type 决定自己的图表类型
        /// </summary>
        public object series { get; set; }

        /// <summary>
        /// 调色盘颜色列表
        /// </summary>
        public string[] color { get; set; }

        /// <summary>
        /// 背景色，默认无背景。
        /// </summary>
        public string backgroundColor { get; set; }

        /// <summary>
        /// 全局的字体样式。
        /// </summary>
        public textStyle textStyle { get; set; }

        /// <summary>
        /// 是否开启动画。
        /// </summary>
        public bool? animation { get; set; }

        /// <summary>
        /// 是否开启动画的阈值，当单个系列显示的图形数量大于这个阈值时会关闭动画。
        /// </summary>
        public double? animationThreshold { get; set; }

        /// <summary>
        /// 初始动画的时长，支持回调函数，可以通过每个数据返回不同的时长实现更戏剧的初始动画效果：
        /// </summary>
        public double? animationDuration { get; set; }

        /// <summary>
        /// 初始动画的缓动效果
        /// </summary>
        public string animationEasing { get; set; }

        /// <summary>
        /// 初始动画的延迟，支持回调函数，可以通过每个数据返回不同的 delay 时间实现更戏剧的初始动画效果。
        /// </summary>
        public double? animationDelay { get; set; }

        /// <summary>
        ///数据更新动画的时长。支持回调函数，可以通过每个数据返回不同的时长实现更戏剧的更新动画效果
        /// </summary>
        public double? animationDurationUpdate { get; set; }

        /// <summary>
        /// 数据更新动画的缓动效果。
        /// </summary>
        public string animationEasingUpdate { get; set; }

        /// <summary>
        ///数据更新动画的延迟，支持回调函数，可以通过每个数据返回不同的 delay 时间实现更戏剧的更新动画效果。
        /// </summary>
        public double? animationDelayUpdate { get; set; }

        /// <summary>
        /// 图形的混合模式。
        /// </summary>
        public string blendMode { get; set; }

        /// <summary>
        /// 图形数量阈值，决定是否开启单独的 hover 层，在整个图表的图形数量大于该阈值时开启单独的 hover 层。
        /// </summary>
        public double? hoverLayerThreshold { get; set; }

        /// <summary>
        /// 是否使用 UTC 时间。
        /// </summary>
        public bool? useUTC { get; set; }
    }
}
